#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2e5+10;

int n,m,q;

typedef struct{int u,v,nxt;} edge;

namespace T{
	int col[MAXN],cnt,tag1[MAXN],tag2[MAXN],fa[22][MAXN],dep[MAXN];
	int h[MAXN],colnum,s[MAXN],t[MAXN];
	edge e[MAXN<<1];
	
	void link(int x,int y){/*cout << x<<y<<endl;*/e[++cnt] = (edge){x,y,h[x]};h[x] = cnt;}

	void dfs(int x,int p){
		col[x] = colnum; fa[0][x] = p; dep[x] = dep[p]+1;
		for(int i = 1;i <= 20;i++) fa[i][x] = fa[i-1][fa[i-1][x]];
		for(int i = h[x];i;i = e[i].nxt){
			int y = e[i].v;
			if(y == p) continue;
//			cout << dep[x]<<endl;
			dfs(y,x);
		}
	}
	
	int lca(int x,int y){
		if(dep[x] < dep[y]) swap(x,y);
		for(int i = 20;i >= 0;i--)
			if(dep[fa[i][x]] >= dep[y]) x = fa[i][x];
		if(x == y) return x;
		for(int i = 20;i >= 0;i--)
			if(fa[i][x] != fa[i][y]) {
				x = fa[i][x];
				y = fa[i][y];
			}
		return fa[0][x];
	}

#define fail {puts("No");return;}

	bool dfs1(int x,int p){
		for(int i = h[x];i;i = e[i].nxt){
			int y = e[i].v;
			if(y == p) continue;
			if(!dfs1(y,x) || tag1[y] && tag2[y]) return 0;
			tag1[x] += tag1[y];tag2[x] += tag2[y];
		}
		return 1;
	}
	
	void work(){
		for(int i = 1;i <= n;i++) if(!col[i]) ++colnum,dfs(i,0);
		for(int i = 1;i <= q;i++){
			if(col[s[i]] != col[t[i]]) fail;
			int x = lca(s[i],t[i]);// cout << x<<endl;
			tag1[s[i]]++; tag1[x]--; tag2[t[i]]++;tag2[x]--;
		}
		for(int i = 1;i <= n;i++) if(dep[i] == 1 && !dfs1(i,0)) fail;
		puts("Yes");return;
	}
}

namespace G{
	int col[MAXN],low[MAXN],dfn[MAXN],cnt = 1,h[MAXN];
	int colnum,tot;
	bool bridge[MAXN<<1];
	
	edge e[MAXN<<1];

	void link(int x,int y){e[++cnt] = (edge){x,y,h[x]};h[x] = cnt;}

	void tarjin(int x,int inedge){
		dfn[x] = low[x] = ++tot;
		for(int i = h[x];i;i = e[i].nxt)
			if(i != inedge){
				int y = e[i].v;
				if(!dfn[y]){
					tarjin(y,i^1);
					low[x] = min(low[x],low[y]);
					if(low[y] > dfn[x]){
						bridge[i] = bridge[i ^ 1] = 1;
					}
				}else low[x] = min(low[x],dfn[y]);
			}
	}

	void dfs(int x){
		col[x] = colnum;// cout << x<<".."<<colnum<<endl;
		for(int i = h[x];i;i = e[i].nxt){
			int y = e[i].v;
			if(!bridge[i] && !col[y])
				dfs(y);
		}
	}
	
	void init(){
		scanf("%d %d %d",&n,&m,&q);
		for(int i = 1;i <= m;i++){
			int x,y; scanf("%d %d",&x,&y);
			link(x,y); link(y,x);
		}
		for(int i = 1;i <= n;i++) if(!dfn[i]) tarjin(i,0);
		for(int i = 1;i <= n;i++) if(!col[i]) colnum++,dfs(i);
		for(int i = 2;i <= cnt;i++){
			int x = e[i].u,y = e[i].v;
			if(col[x] !=  col[y] && col[x] < col[y])
				T::link(col[x],col[y]),T::link(col[y],col[x]);
		}
		for(int i = 1;i <= q;i++){
			scanf("%d %d",&T::s[i],&T::t[i]);
			T::s[i] = col[T::s[i]];
			T::t[i] = col[T::t[i]];
			//		cout << T::s[i]<<T::t[i]<<endl;
			if(T::s[i] == T::t[i]) i--,q--;
		}
	}
}

int main (){
	G::init();T::work();
	return 0;
}
